﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Model;
using System.Data.SQLite;

namespace Data
{
    public class productoDataAccess
    {
        private SQLiteConnection con;
        private DataTable dt = new DataTable();
        private DataSet dataSet = new DataSet();

        public productoDataAccess()
        {
            con = DataBaseHelper.GetConnection("BDHostal.sqlite");
        }

        public bool existeProducto(string nom)
        {
            string cmd = "SELECT * FROM producto WHERE nombre = '" + nom + "'";
            bool resultado = false;

            try
            {
                con.Open();
                SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                dataSet.Reset();
                dataAdapter.Fill(dataSet);
                dt = dataSet.Tables[0];
                if (dt.Rows.Count > 0)
                    resultado = true;
                else
                    resultado = false;


            }
            catch (SystemException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
            return resultado;
        }

        public void NuevoProducto(producto h)
        {
            using (var cmd = con.CreateCommand())
            {
                try
                {
                    con.Open();
                    cmd.CommandText = "INSERT INTO producto(nombre,precio,descripcion,frigo) VALUES ('" + h.Nombre + "','" + h.Precio + "','" + h.Descripcion + "','')";
                    cmd.ExecuteNonQuery();

                }
                catch (SQLiteException ex)
                {

                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                    throw new Exception("Error Registrando producto.");
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
        }
        public void modificarProducto(producto h)
        {
            if (existeProducto(h.Nombre) && cambioNombre(h))
                throw new Exception("El producto ya existe");
            
            using (var cmd = con.CreateCommand())
            {
                try
                {
                    con.Open();
                    cmd.CommandText = "UPDATE producto SET nombre='" + h.Nombre + "',precio='" + h.Precio + "',descripcion='" + h.Descripcion + "' WHERE idproducto='" + h.idProducto + "'";
                    cmd.ExecuteNonQuery();

                }
                catch (SQLiteException ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                    throw new Exception("Error Modificando Producto.");
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
        }

        private bool cambioNombre(producto h)
        {
            string cmd = "SELECT * FROM producto WHERE nombre='" + h.Nombre + "' AND idproducto = '" + h.idProducto + "'";
            bool resultado = false;

            try
            {
                con.Open();
                SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                dataSet.Reset();
                dataAdapter.Fill(dataSet);
                dt = dataSet.Tables[0];
                if (dt.Rows.Count > 0)
                    resultado = false;
                else
                    resultado = true;


            }
            catch (SystemException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
            return resultado;
        }

        public void eliminarProducto(string id)
        {
           
            using (var cmd = con.CreateCommand())
            {
                try
                {
                    con.Open();
                    cmd.CommandText = "DELETE FROM producto WHERE idproducto='" + id + "'";
                    cmd.ExecuteNonQuery();

                }
                catch (SQLiteException ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                    throw new Exception("Error Borrando Producto.");
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
        }

        public DataTable buscarProductosParams(string pro)
        {
            string cmd = "SELECT nombre,precio FROM producto WHERE nombre like '%" + pro.ToLowerInvariant() + "%' OR descripcion like '%" + pro.ToLowerInvariant() + "%'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                    throw ex;
                }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public DataTable buscarDatosP(string id)
        {
            string cmd = "SELECT * FROM producto WHERE idproducto = '"+ id +"'";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                    throw ex;
                }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public DataTable buscarProductos()
        {
            string cmd = "SELECT idproducto,nombre,precio FROM producto";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                    throw ex;
                }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public DataTable buscarProductosFrigo()
        {
            string cmd = "SELECT idproducto,nombre,precio FROM producto WHERE frigo=1";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                    throw ex;
                }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }

        public DataTable buscarProductosNoFrigo()
        {
            string cmd = "SELECT idproducto,nombre,precio FROM producto WHERE frigo=''";
            {
                try
                {
                    con.Open();
                    SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd, con);
                    dataSet.Reset();
                    dataAdapter.Fill(dataSet);
                    dt = dataSet.Tables[0];
                }
                catch (SystemException ex)
                {
                    throw ex;
                }
                finally
                {
                    con.Close();
                }
            }
            return dt;
        }


        public void agregarAFrigobar(string p)
        {
            using (var cmd = con.CreateCommand())
            {
                try
                {
                    con.Open();
                    cmd.CommandText = "UPDATE producto SET frigo='1' WHERE idproducto='" + p + "'";
                    cmd.ExecuteNonQuery();

                }
                catch (SQLiteException ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                    throw new Exception("Error registrando frigobar.");
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
        }

        public void vaciarFrigobar()
        {
           
            using (var cmd = con.CreateCommand())
            {
                try
                {
                    con.Open();
                    cmd.CommandText = "UPDATE producto SET frigo=''";
                    cmd.ExecuteNonQuery();

                }
                catch (SQLiteException ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                    throw new Exception("Error Modificando Producto.");
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
        }
    }
}
